#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <error.h>
#include "function.h"
#define prt(CONTENT, MSG) printf(CONTENT ":\t%p\n", MSG)
#define CACHE BUFSIZ
void pr_stdio(const char *name, FILE *fp)
{
    printf("stream =%s\n", name);
    printf("buffsize = %ld\n", fp->_IO_buf_end - fp->_IO_buf_base);
}
int main(int argc, char *const argv[])
{
    // part1
    // FILE *fp_src, *fp_des; // ANSI C库函数fopen()打开一个文件后，将返回一个文件流指针与该文件关联
    // char buffer[10], buffer1[128];
    // int i;
    // if ((fp_src = fopen("/home/bzsg/workspace/study/linuxc/assets/src.txt", "r+")) == NULL)
    // {
    //     printf("helloworld jensen linuxc");
    //     perror("open1");
    //     exit(EXIT_FAILURE);
    // }
    // if ((fp_des = fopen("/home/bzsg/workspace/study/linuxc/assets/des.txt", "w+")) == NULL)
    // {
    //     perror("open2");
    //     exit(EXIT_FAILURE);
    // }
    // setvbuf(fp_src, buffer1, _IOLBF, 128); // 显示设置缓冲区位置及类型，一般应用不需要
    // do
    // {
    //     prt("src_read_ptr", fp_src->_IO_read_ptr); // 源文件读位置
    //     prt("src_read_end", fp_src->_IO_read_end);
    //     prt("src_read_base", fp_src->_IO_read_base);
    //     //
    //     prt("src_write_ptr", fp_src->_IO_write_ptr); // 源文件写位置
    //     prt("src_write_base", fp_src->_IO_write_base);
    //     prt("src_write_end", fp_src->_IO_write_end);

    //     prt("src_read_ptr", fp_src->_IO_read_ptr); // 源文件缓冲区位置
    //     prt("src_read_ptr", fp_src->_IO_read_ptr);

    //     memset(buffer, '\0', 10);
    //     i = fread(buffer, 1, 10, fp_src); // 读
    //     fwrite(buffer, 1, i, fp_des);     // 写

    //     prt("des__read_ptr", fp_src->_IO_read_ptr);  // 目标文件读位置
    //     prt("des_wirte_ptr", fp_src->_IO_write_ptr); // 目标文件写位置
    // } while (i == 10);
    // fclose(fp_src);
    // fclose(fp_des);
    // printf("%d", CACHE);

    // // part2
    // FILE *fp;
    // fputs("enter any chapter \n", stdout);
    // if (getchar() == EOF)
    //     printf("getchar error");
    // pr_stdio("stdin", stdin);   // 测试标准输入流 ,1024
    // pr_stdio("stdout", stdout); // 测试标准输出流 ,1024
    // pr_stdio("stderr", stderr); // 测试标准错误输出流，无缓冲区0
    // if ((fp = fopen("/home/bzsg/workspace/study/linuxc/assets/src.txt", "r")) == NULL)
    // {
    //     printf("NULL \n");
    // }
    // if (fgetc(fp) == EOF)
    //     printf("getc error");
    // pr_stdio("/home/bzsg/workspace/study/linuxc/assets/src.txt", fp); // 普通文件流缓冲区4096
    // fclose(fp);

    // FILE* fp = NULL;
    // fp = fopen("/home/bzsg/workspace/study/linuxc/assets/src.txt", "r");
    // if(fp ==NULL){
    //   printf("fail open the file\n");
    //   return -1;
    // }
    // printf("\nopen file successfully\n");
    // char ch;
    // while ((ch=fgetc(fp))!=EOF)
    // {
    //     fputc(ch,stdout);
    // }
    // char str[20];
    // fgets(str,sizeof(str),fp);    //从打开的文件中读取sizeof(str)个字节到str
    // fputs(str,stdout);            //将str输出到屏幕
    // fclose(fp);

    // struct student
    // {
    //     char name[10];
    //     int number;
    // };
    // FILE* fp =NULL;
    // struct student boya[2],boyb[2],*pp,*qq;
    // if((fp = fopen("/home/bzsg/workspace/study/linuxc/assets/test.txt", "w+")) ==NULL){
    //    printf("can not open!\n");
    //    return -1;
    // }
    // pp =boya;
    // qq =boyb;
    // for (size_t i = 0; i < 2; i++,pp++)
    // {
    //     scanf("%s\t%d",pp->name,&pp->number);
    // }
    // pp =boya;
    // fwrite(pp,sizeof(struct student),2,fp);
    // rewind(fp);
    // fread(qq,sizeof(struct student),2,fp);
    // for (size_t i = 0; i < 2; i++,qq++)
    // {
    //     printf("%s\t\t %d\n",qq->name,qq->number);
    // }
    // fclose(fp);

    // FILE* fp =NULL;
    // if ((fp = fopen("/home/bzsg/workspace/study/linuxc/assets/src.txt", "rb")) == NULL) {
    //     perror("Source open failed");
    //     exit(EXIT_FAILURE);
    // }
    // if(fseek(fp,0,SEEK_END)!=0){
    //     perror("fseek");
    //     exit(EXIT_FAILURE);
    // }
    // int n=0;
    // if((n=ftell(fp))==-1){   //读取当前文件读写位置值
    //     perror("ftell");
    //     exit(EXIT_FAILURE);
    // }
    // printf("%d",n);
    // fclose(fp);
    int i = 12;
    // char a[10];
    // printf("input string:");
    // scanf("%s",a);
    // i=printf("the string is:%s\n",a);
    // printf("the last printf return %d\n",i);

    // //1.打印字符
    // char c ='c';
    // printf("%c\n",c);
    // //2.打印整形
    // printf("%d\n",i);
    // printf("%u\n",i);
    // //3.打印浮点数
    // float f = 120;
    // printf("%f\n",f);
    // //4.打印指针
    // int * ii = &i;
    // printf("%p\n",ii);
    // //5.打印8进制和16进制
    // printf("%o\n",i);
    // printf("%x\n",i);

    char a_buf[256], b_buf[256];
    FILE *fp = NULL;
    if ((fp = fopen("/home/bzsg/workspace/study/linuxc/assets/test.txt", "w+")) == NULL)
    {
        perror("Source open failed");
        exit(EXIT_FAILURE);
    }
    scanf("%s", a_buf);
    fprintf(fp, "%s", a_buf);
    rewind(fp);
    fscanf(fp, "%s", b_buf);
    printf("%s\n", b_buf);
    fclose(fp);
    return 0;
}